<?php
namespace app\test\controller;
use think\Db;
use think\Controller;
class Clipay extends Controller
{
	public function index()
	{
		return view('./test1/alipay');

	}
	public function pagepay1()
	{
		    $out_trade_no = trim(input('WIDout_trade_no'));

		    //订单名称，必填
		    $subject = trim(input('WIDsubject'));

		    //付款金额，必填
		    $total_amount = trim(input('WIDtotal_amount'));

		    echo $out_trade_no+' '+$subject+' '+$total_amount;
	}
	public function pagepay()
	{
        //$user_id=session('user_id');
        /*$user_id='3';
		$shopcart_id=input('shopcartId');
        $order_total=input('WIDtotal_amount');
        $order_number=input('WIDout_trade_no');*/
       
		require_once ROOT_PATH.'vendor/alipay/config.php';
        require_once ROOT_PATH.'vendor/alipay/pagepay/service/AlipayTradeService.php';
        require_once ROOT_PATH.'vendor/alipay/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';

		    //商户订单号，商户网站订单系统中唯一订单号，必填
		    $out_trade_no = trim(input('WIDout_trade_no'));

		    //订单名称，必填
		    $subject = trim(input('WIDsubject'));

		    //付款金额，必填
		    $total_amount = trim(input('WIDtotal_amount'));

		    //商品描述，可空
		   // $body = trim($_POST['WIDbody']);

			//构造参数
			$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
			//$payRequestBuilder->setBody($body);
			$payRequestBuilder->setSubject($subject);
			$payRequestBuilder->setTotalAmount($total_amount);
			$payRequestBuilder->setOutTradeNo($out_trade_no);

			$aop = new \AlipayTradeService($config);

			/**
			 * pagePay 电脑网站支付请求
			 * @param $builder 业务参数，使用buildmodel中的对象生成。
			 * @param $return_url 同步跳转地址，公网可以访问
			 * @param $notify_url 异步通知地址，公网可以访问
			 * @return $response 支付宝返回的信息
		 	*/
			$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);

			//输出表单
			var_dump($response);
		}

			public function notify_url()
		{
				
				require_once ROOT_PATH.'vendor/alipay/config.php';
		        require_once ROOT_PATH.'vendor/alipay/pagepay/service/AlipayTradeService.php';

				$arr=$_POST;
				$alipaySevice = new \AlipayTradeService($config); 
				$alipaySevice->writeLog(var_export($_POST,true));
				$result = $alipaySevice->check($arr);


				
				if($result) {//验证成功
					/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
					//请在这里加上商户的业务逻辑程序代
					
					
					//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
					
				    //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
					
					//商户订单号
					 //$user_id=session('user_id');
                    

					$out_trade_no = $_POST['out_trade_no'];

					$result=db('order')->where('order_number={$out_trade_no}')->update(['status'=>1]);
					 if($result===0)
    {
      $this->error("没有任何修改");
    }
     if($ret===false)
    {
      $this->error("修改失败");
    }
     $this->success('修改成功'/*,'backend/banner/bannerlist'*/);die;
   


					//支付宝交易号

					$trade_no = $_POST['trade_no'];

					//交易状态
					$trade_status = $_POST['trade_status'];


				    if($_POST['trade_status'] == 'TRADE_FINISHED') {

						//判断该笔订单是否在商户网站中已经做过处理
							//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
							//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
							//如果有做过处理，不执行商户的业务程序
								
						//注意：
						//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
				    }
				    else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
						//判断该笔订单是否在商户网站中已经做过处理
							//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
							//请务必判断请求时的total_amount与通知时获取的total_fee为一致的
							//如果有做过处理，不执行商户的业务程序			
						//注意：
						//付款完成后，支付宝系统发送该交易状态通知
				    }
					//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
					echo "success";	//请不要修改或删除
				}else {
				    //验证失败
				    echo "fail";

				}

		}

	public function return_url()
	{
		require_once ROOT_PATH.'vendor/alipay/config.php';
        require_once ROOT_PATH.'vendor/alipay/pagepay/service/AlipayTradeService.php';


		$arr=$_GET;
		$alipaySevice = new \AlipayTradeService($config); 
		$result = $alipaySevice->check($arr);

		/* 实际验证过程建议商户添加以下校验。
		1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号，
		2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额），
		3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）
		4、验证app_id是否为该商户本身。
		*/
		if($result) {//验证成功
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
			//请在这里加上商户的业务逻辑程序代码
			
			//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
		    //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表

			//商户订单号
			$out_trade_no = htmlspecialchars($_GET['out_trade_no']);

			//支付宝交易号
			$trade_no = htmlspecialchars($_GET['trade_no']);
				
			echo "验证成功<br />支付宝交易号：".$trade_no;

			return view('/frontend/index/index');

			//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
			
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
		    //验证失败
		    echo "验证失败";
		    return view('/frontend/shopcart/index');
		}

	}
}